var menus = [];
var $menus,
    $editModal,
    $createBtn,
    $saveBtn,
    $refreshBtn;

var renderMenus = function() {
    $menus.empty();
    menus.some(function(menu, i) {
        var $tr = $('<tr id="' + menu._id + '">' +
        '   <td>' + menu.name + '</td>' +
        '   <td>' + menu.path + '</td>' +
        '   <td>' + menu.roles.join(',') + '</td>' +
        '   <td>' +
        '       <button class="btn btn-default btn-xs edit" type="button"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span></button>' +
        '       <button class="btn btn-default btn-xs remove" type="button"><span class="glyphicon glyphicon-remove-circle" aria-hidden="true"></span></button>' +
        '   </td>' +
        '</tr>').appendTo($menus);

        $tr.find('button.edit').click(function() {
            $editModal.find('input.id').val(menu._id);
            $editModal.find('input.name').val(menu.name);
            $editModal.find('input.path').val(menu.path);
            $.each(menu.roles, function(i, role) {
                $editModal.find('input.role[value="' + role + '"]').each(function(j, checkbox) {
                    checkbox.checked = true;
                });
            });
            $editModal.modal();
        });

        $tr.find('button.remove').click(function() {
            if (window.confirm('是否要删除菜单“' + menu.name + '”？')) {
                deleteMenu(menu._id, function(err) {
                    if (err) {
                        alert('删除失败。');
                    }

                    $refreshBtn.click();
                });
            }
        });
    });
};

var init = function() {
    $menus = $('.menus');
    $editModal = $('#edit_modal');
    $createBtn = $('.create-btn');
    $saveBtn = $('#save_btn');
    $refreshBtn = $('.refresh-btn');

    // 编辑模态窗口
    $editModal.on('hidden.bs.modal', function(event) { // 窗口隐藏
        $editModal.find('input:text, input:hidden').val('');
        $editModal.find('input:checkbox').each(function(i, checkbox) {
            checkbox.checked = false;
        });
    });

    // 新增
    $createBtn.click(function() {
        $editModal.modal();
    });

    // 保存
    $saveBtn.click(function() {
        var id = $editModal.find('input.id').val();
        var menu = {
            name : $editModal.find('input.name').val(),
            path : $editModal.find('input.path').val(),
            roles : []
        }
        $editModal.find('input.role:checkbox:checked').each(function(i, checkbox) {
            menu.roles.push(checkbox.value);
        });

        if (id) { // 修改
            putMenu(id, menu, function(err, result) {
    			if (err) {
    				var $errMsg = $editModal.find('.alert').hide().empty();
    				if (result) {
    					if (result.errors) {
    						$.each(result.errors, function(key, errObj) {
    							var $formGroup = $editModal.find('.' + key).parents('.form-group').addClass('has-error');
    							$formGroup.find('.alert').append(errObj.message).show();
    						});
    					} else if (result.code == 11000) {
    						$editModal.find('.name').addClass('has-error');
    						$errMsg.append('菜单名称已存在。');
    					}
    				}
    				return;
    			}
                $editModal.modal('hide');
                $refreshBtn.click();
            });
        } else { // 新增
            postMenu(menu, function(err, result) {
    			if (err) {
    				var $errMsg = $editModal.find('.alert').hide().empty();
    				if (result) {
    					if (result.errors) {
    						$.each(result.errors, function(key, errObj) {
    							var $formGroup = $editModal.find('.' + key).parents('.form-group').addClass('has-error');
    							$formGroup.find('.alert').append(errObj.message).show();
    						});
    					} else if (result.code == 11000) {
    						$editModal.find('.name').addClass('has-error');
    						$errMsg.append('菜单名称已存在。');
    					}
    				}
    				return;
    			}
                $editModal.modal('hide');
                $refreshBtn.click();
            });
        }
    });

    // 刷新按钮
    $refreshBtn.click(function() {
        getMenus({}, function(err, list) {
            if (err) {
                renderError(err);
                return;
            }

            menus = list;
            renderMenus();
        });
    }).click();
};

$(init);
